/**
 * http网络错误统一处理
 */
shared.factory('httpErrorInterceptor', function ($cookies, localStorageService) {

    var httpErrorInterceptor = {
        request: function (config) {
            // 除.html(模板)结尾的请求外禁止缓存（$http.get方法会出现缓存）
            if (!config.url.endWith('.html')) {
                config.url += ('?bust=' + (new Date()).getTime());
            }
            return config;
        },
        response: function (res) {
            //angular-ui-router加载view模板也会进到response，此时返回的是模板字符串。
            if (angular.isObject(res.data)) {
                //1.正常响应(success == true)，由业务逻辑处理
                if (res.data.success) {
                    return res;
                }

                var errorCode = res.data.errorCode;
                //2.在I18N中注册了的errorCode(可能是全errorCode，也可能是errorCode的后6位)，由业务逻辑自己处理。
                if (I18N.ERR_CODE[errorCode] || (errorCode && I18N.ERR_CODE[errorCode.substring(3)])) {
                    return res;
                }

                //3.访问拦截
                // if (accessInterceptor(errorCode)) {
                //     //页面进行跳转，跳出函数
                //     return;
                // }

                //6.统一处理业务异常
                if (res.data.errorLevel === 'BIZ') {
                    Ut.dialog.warn(res.data.errorMsg, I18N.OK);
                    return res;
                } else if (res.data.errorLevel === 'SYS') {
                    //7.统一处理系统异常
                    Ut.dialog.errMsg(res.data.errorMsg);
                    return res;
                }

            } else {
                return res;
            }

        },
        requestError: function (e) {
            return e;
        },
        responseError: function (e, b) {
            if (e.status === 401) {
                //登录过期
                Ut.dialog.warn(I18N.ERR_Msg.noLogin, I18N.BTN_NAME.b2, function () {
                    setTimeout(function () {
                        $cookies.put('historyUrl', window.location.href, {path: '/'});
                        //清除role
                        $cookies.remove('role', {path: '/'});
                        window.location.href = SYSCONF.index_url;
                    }, 500);
                });
            } else {
                console.error('请求出现错误,status：' + e.status + ',statusText:' + e.statusText + ',data:' + e.data);
                return e;
            }
        }
    };

    return httpErrorInterceptor;

    //访问拦截
    function accessInterceptor(errorCode) {
        //1.登录过期
        if (errorCode && errorCode.endWith('S00011')) {
            Ut.dialog.warn(I18N.ERR_Msg.noLogin, I18N.BTN_NAME.b2, function () {
                setTimeout(function () {
                    $cookies.put('historyUrl', window.location.href, {path: '/'});
                    //清除role
                    $cookies.remove('role', {path: '/'});
                    window.location.href = SYSCONF.index_url;
                }, 500);
            });
            return true;
        }

        //2.没有权限
        if (errorCode && errorCode.endWith('S00010')) {
            Ut.dialog.warn(I18N.ERR_Msg.noPermission, I18N.BTN_NAME.b1, function () {
                setTimeout(function () {
                    window.location.href = SYSCONF.index_url;
                }, 500);
            });
            return true;
        }

        //3.license失效: A01B00010为license过期，A01B00011为网元数超过license限制,A01B00013为license无效
        // if (errorCode && (errorCode.endWith('B00010') || errorCode.endWith('B00011') || errorCode.endWith('B00013'))) {
        //     localStorageService.set('license', true);
        //     Ut.dialog.warn(res.data.errorMsg, I18N.BTN_NAME.b3, function () {
        //         setTimeout(function () {
        //             window.location.href = SYSCONF.nginx_licenseUrl;
        //         }, 500);
        //     });
        //     return true;
        // }

        return false;
    }
});
